#ifndef __GAF_PLATFORM_H__
#define __GAF_PLATFORM_H__


namespace GAF
{
	class Platform;
}
typedef GAF::Platform				GAF_CPlatform;

#include "GAF_Define.h"
#include "GAF_Application.h"	// 此引用可保证所有文件都可以访问"GAF_Application.h"
#include "GAF_Window.h"
#include "GAF_Command.h"
#include "GAF_Canvas.h"
// #include "GAF_Package.h"
#include "GAF_Media.h"

namespace GAF
{
	/// 引擎平台接口基类
	class _ABSTRACT Platform
	{
	public:
		Platform(){}
		virtual ~Platform(){}

	public:
		// 图像平台函数
		/**
		 *  @name 图像平台函数
		 */

		/// 初始化图像引擎平台
		virtual bool			InitPlatform(GAF_CBundle* pbdlParam = NULL) = 0;
		/// 卸载图像引擎平台
		virtual bool			DestroyPlatform() = 0;


		// 窗口函数
		/**
		 *  @name 窗口函数
		 */

		/// 创建窗口
		virtual GAF_DWindowHandle	NewWindow(GAF_SCreateWindow& cw) = 0;
		/// 显示窗口
		virtual	bool			ShowWindow(GAF_DWindowHandle hWindow) = 0;
		/// 隐藏窗口
		virtual bool			HideWindow(GAF_DWindowHandle hWindow) = 0;
		/// 渲染窗口
		virtual void			RanderWindow(GAF_DWindowHandle hWindow) = 0;
		/// 翻转窗口
		virtual void			FlipWindow(GAF_DWindowHandle hWindow) = 0;
		/// 销毁窗口
		virtual bool			DeleteWindow(GAF_DWindowHandle hWindow) = 0;
		/// 设置窗口标题
		virtual void			SetWindowTitle(GAF_DWindowHandle hWindow, STD_STRING strTitle)
						{return;}

		// 命令函数
		/**
		 *  @name 命令函数
		 */

		/// 获得命令
		virtual bool			GetCommand(GAF_DWindowHandle hWindow, _OUT GAF_SCommand& cmdGet) = 0;
		/// 清除命令缓冲
		virtual void			ClearCommandBuffer(GAF_DWindowHandle hWindow) = 0;


		// 画布函数
		/**
		 *  @name 画布函数
		 */

		/// 创建画布
		virtual GAF_CCanvas*		NewCanvas(GAF_DWindowHandle hWindow) = 0;
		/// 销毁画布
		virtual bool			DeleteCanvas(GAF_CCanvas* pCanvas) = 0;


		// 图像函数
		/**
		 *  @name 图像函数
		 */

		/// 加载图像
		virtual GAF_DImageHandle	NewImage(const STD_STRING strPathFile, _OUT ImageInfo& ii) = 0;
		/// 加载图像
		virtual GAF_DImageHandle	NewImage(const void* pData, const SIZET nSize, _OUT ImageInfo& ii) = 0;
		/// 创建图像
		virtual GAF_DImageHandle	NewImage(const UINT nWidth, const UINT nHeight, _OUT ImageInfo& ii) = 0;
		/// 获取图像信息
		virtual bool			GetImageInfo(const GAF_DImageHandle hImage, _OUT ImageInfo& ii) = 0;
		/// 销毁图像
		virtual bool			DeleteImage(GAF_DImageHandle hImage) = 0;


		// 音频函数
		/**
		 *  @name 音频函数
		 */
		/// 初始化音频
		virtual bool			InitAudio(GAF_CBundle* pbdlParam = NULL)
						{return false;}
		/// 卸载音频
		virtual bool			DestroyAudio()
						{return false;}
		/// 默认音频播放器
		virtual bool			AudioPlayer(_IN_OUT GAF_SMediaTransfer& mi)
						{return false;}

// 		// IO操作函数
// 		/**
// 		 *  @name IO操作函数
// 		 */


		// 其他平台功能函数
		/**
		 *  @name 其他平台功能函数
		 */
		/// 获得系统时间
		virtual GAF_DTimeTicks		GetTimeTicks();
		/// 程序睡眠
		virtual void			Delay(GAF_DTimeTicks ttSleep);
	};
}

#endif
